package com.oig.sys.msg.controller;


import com.oig.common.module.SysResponse;
import com.oig.common.validator.GroupAdd;
import com.oig.common.validator.GroupEdit;
import com.oig.sys.log.annotation.SysLog;
import com.oig.sys.msg.dto.MqConfigDto;
import com.oig.sys.msg.service.ITbMqConfigService;
import com.oig.sys.msg.vo.MqConfigVo;
import com.oig.sys.security.util.SecurityUtil;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;

/**
 * mq消息配置管理
 * 补充发送消息需要
 */
@Tag(name = "mq配置管理")
@RestController
@RequestMapping("/mqConfig")
@Slf4j
@RequiredArgsConstructor
public class TbMqConfigController {

    private final ITbMqConfigService mqConfigService;


    /**
     * 后续再加配置需要复核才能生效
     */
    @PreAuthorize("@pms.hasPermission('/mqConfig/add')")
    @SysLog(value="添加mq配置",apiUrl="/mqConfig/add")
    @Operation(summary = "添加mq配置")
    @PostMapping(value = "/add")
    public MqConfigVo addMqConfig(@RequestBody @Validated(GroupAdd.class) MqConfigDto mqConfigDto){
        log.info("add mq msg config, {}", mqConfigDto);
        mqConfigDto.setCreateId(SecurityUtil.getDefineUserMain().getId());
        mqConfigDto.setCreateName(SecurityUtil.getDefineUserMain().getRealName());
        mqConfigDto.setCreateTime(new Date());
        mqConfigDto.setLastUpdateId(mqConfigDto.getCreateId());
        mqConfigDto.setLastUpdateName(mqConfigDto.getCreateName());
        mqConfigDto.setLastUpdateTime(mqConfigDto.getCreateTime());
        return this.mqConfigService.addMqConfig(mqConfigDto);
    }


    @PreAuthorize("@pms.hasPermission('/mqConfig/update')")
    @SysLog(value="修改mq配置",apiUrl="/mqConfig/update")
    @Operation(summary = "修改mq配置")
    @PostMapping(value = "/update")
    public MqConfigVo updateMqConfig(@RequestBody @Validated(GroupEdit.class) MqConfigDto mqConfigDto){
        log.info("update mq msg config, {}", mqConfigDto);
        mqConfigDto.setLastUpdateId(SecurityUtil.getDefineUserMain().getId());
        mqConfigDto.setLastUpdateName(SecurityUtil.getDefineUserMain().getRealName());
        mqConfigDto.setLastUpdateTime(new Date());
        return this.mqConfigService.updateMqConfig(mqConfigDto);
    }


    @PreAuthorize("@pms.hasPermission('/mqConfig/cancel')")
    @SysLog(value="删除mq配置",apiUrl="/mqConfig/cancel")
    @Operation(summary = "删除mq配置")
    @PostMapping(value = "/cancel/{configId}")
    public SysResponse<Integer> cancelMqConfig(@PathVariable("configId") Integer configId){
        log.info("del mq msg config id={}", configId) ;
        this.mqConfigService.cancelMqConfig(configId);
        return SysResponse.ok(configId,"删除mq配置成功");
    }


    @Operation(summary = "查看mq配置信息")
    @PostMapping(value = "/info/{configId}")
    public MqConfigVo getMqConfig(@PathVariable("configId") Integer configId){
        log.info(" get mq config id=:{}", configId);
        return this.mqConfigService.getMqConfig(configId);
    }

}
